home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / mus / midi / tf102_de.lha / tracks&fieldsdemo / tracks&fields / source / Tracks&Fields_Commands.S
Text File  |  1992-09-02  |  11KB  |  519 lines

  1. *************************************************
  2. *                        *
  3. *                        *
  4. *                        *
  5. *                        *
  6. *                        *
  7. *                        *
  8. *   Default commands for Tracks&Fields 1.0    *
  9. *                        *
  10. *                        *
  11. *                        *
  12. *                        *
  13. *                        *
  14. *                        *
  15. *************************************************
  16.  
  17. *************************************************
  18. * Patch offsets                    *
  19. *************************************************
  20.  
  21. p_volume    EQU    0 ; B        : Patchdata
  22. p_channel    EQU    1 ; B
  23. p_length    EQU    2 ; B
  24. p_program    EQU    3 ; B
  25. p_sizeof    EQU    4
  26.  
  27. px_user1    EQU    0 ; B        : Patch extra data...
  28. px_user2    EQU    1 ; B
  29. px_user3    EQU    2 ; B
  30. px_user4    EQU    3 ; B
  31. px_user5    EQU    4 ; B
  32. px_user6    EQU    5 ; B
  33. px_user7    EQU    6 ; B
  34. px_user8    EQU    7 ; B
  35. px_user9    EQU    8 ; B
  36. px_user10    EQU    9 ; B
  37. px_user11    EQU    10 ; B
  38. px_user12    EQU    11 ; B
  39. px_panpot    EQU    12 ; B
  40. px_mainvolume    EQU    13 ; B
  41. px_user13    EQU    14 ; B
  42. px_user14    EQU    15 ; B
  43. px_user15    EQU    16 ; B
  44. px_user16    EQU    17 ; B
  45. px_sizeof    EQU    18
  46.  
  47. *************************************************
  48. * ChanxxTemp offsets                *
  49. *************************************************
  50.  
  51. n_pattdata    EQU    0  ; B
  52. n_midinote    EQU    0  ; B
  53. n_midipatch    EQU    1  ; B
  54. n_cmd1hi    EQU    2  ; B
  55. n_cmd1lo    EQU    3  ; B
  56. n_pattdata2    EQU    4  ; B
  57. n_cmd2hi    EQU    4  ; B
  58. n_cmd2lo    EQU    5  ; B
  59. n_cmd3hi    EQU    6  ; B
  60. n_cmd3lo    EQU    7  ; B
  61. n_volume    EQU    8  ; B
  62. n_mute        EQU    9  ; B
  63. n_channel    EQU    10 ; B
  64. n_nr        EQU    11 ; B
  65. n_length    EQU    12 ; B
  66. n_note        EQU    13 ; B
  67. n_patch        EQU    14 ; B
  68. n_reserved1    EQU    15 ; B
  69. n_reserved2    EQU    16 ; W
  70. n_notedelay    EQU    18 : B
  71. n_sizeof    EQU    24 ; <- length of ChanXTemp block
  72.  
  73. *************************************************
  74. * Offsets to code and data            *
  75. *************************************************
  76.  
  77. mcmd_SendMIDI    EQU    0*4    ; -> APTR to SendMIDI routine
  78. mcmd_SetTempo    EQU    1*4    ; -> APTR to SetTempo routine.
  79.                 ;    Change tempo in mdat_tempo,
  80.                 ;    call this routine then set mdat_update-
  81.                 ;    tempoprop flag.
  82. mdat_Chan1Temp    EQU    2*4    ; -> APTR to BLOCK Chan1data (24 bytes)
  83. mdat_Chan2Temp    EQU    3*4    ; -> APTR to BLOCK Chan2data (24 bytes)
  84. mdat_Chan3Temp    EQU    4*4    ; -> APTR to BLOCK Chan3data (24 bytes)
  85. mdat_Chan4Temp    EQU    5*4    ; -> APTR to BLOCK Chan4data (24 bytes)
  86. mdat_Chan5Temp    EQU    6*4    ; -> APTR to BLOCK Chan5data (24 bytes)
  87. mdat_Chan6Temp    EQU    7*4    ; -> APTR to BLOCK Chan6data (24 bytes)
  88. mdat_Chan7Temp    EQU    8*4    ; -> APTR to BLOCK Chan7data (24 bytes)
  89. mdat_Chan8Temp    EQU    9*4    ; -> APTR to BLOCK Chan8data (24 bytes)
  90. mdat_Chan9Temp    EQU    10*4    ; -> APTR to BLOCK Chan9data (24 bytes)
  91. mdat_Chan10Temp    EQU    11*4    ; -> APTR to BLOCK Chan10data (24 bytes)
  92. mdat_Chan11Temp    EQU    12*4    ; -> APTR to BLOCK Chan11data (24 bytes)
  93. mdat_Chan12Temp    EQU    13*4    ; -> APTR to BLOCK Chan12data (24 bytes)
  94. mdat_Chan13Temp    EQU    14*4    ; -> APTR to BLOCK Chan13data (24 bytes)
  95. mdat_Chan14Temp    EQU    15*4    ; -> APTR to BLOCK Chan14data (24 bytes)
  96. mdat_Chan15Temp    EQU    16*4    ; -> APTR to BLOCK Chan15data (24 bytes)
  97. mdat_Chan16Temp    EQU    17*4    ; -> APTR to BLOCK Chan16data (24 bytes)
  98.  
  99. mdat_PatchPtr    EQU    18*4    ; -> APTR to APTR PatchDataMemory !Read only!
  100. mdat_PatchXPtr    EQU    19*4    ; -> APTR to APTR to extra PatchDataMemory,
  101.                 ;    mainvol, pan...
  102. mdat_NumPatches    EQU    20*4    ; -> APTR to LONG PatchCount    !Read only!
  103.  
  104. mdat_Counter    EQU    21*4    ; -> APTR to WORD    Read only!
  105. mdat_PattBreakPos EQU    22*4    ; -> APTR to WORD
  106. mdat_PattBreakFlag EQU    23*4    ; -> APTR to BYTE
  107. mdat_Tempo    EQU    24*4    ; -> APTR to WORD
  108. mdat_Speed    EQU    25*4    ; -> APTR to WORD
  109. mdat_PatternPos    EQU    26*4    ; -> APTR to WORD
  110. mdat_SongPos    EQU    27*4    ; -> APTR to WORD
  111. mdat_UpdateTempoProp EQU 28*4    ; -> APTR to BYTE, set this flag whenever
  112.                 ;    tempo is changed...
  113. mdat_CommandData EQU    29*4    ; -> APTR to User datablock (1024 bytes)
  114.  
  115. *************************************************
  116. * Macros                    *
  117. *************************************************
  118.  
  119. SAVEREGS    MACRO
  120.         MOVEM.L    D0-D7/A0-A6,-(SP)
  121.         ENDM
  122.  
  123. LOADREGS    MACRO
  124.         MOVEM.L    (SP)+,D0-D7/A0-A6
  125.         ENDM
  126.  
  127. SENDMIDI    MACRO
  128.         SAVEREGS
  129.         MOVE.L    mcmd_SendMIDI(A2),A0
  130.         JSR    (A0)
  131.         LOADREGS
  132.         ENDM
  133.  
  134. SETTEMPO    MACRO
  135.         SAVEREGS
  136.         MOVE.L    mcmd_SetTempo(A2),A0
  137.         JSR    (A0)
  138.         LOADREGS
  139.         ENDM
  140.  
  141. *************************************************
  142. *                        *
  143. * You recieve 6 registers with information:    *
  144. *                        *
  145. *    A2=ptr code and Data block        *
  146. *    A3=ptr to Current Patch            *
  147. *    A4=ptr to Current Patch extra data    *
  148. *    A5=ptr to Current ChanTemp block    *
  149. *    D0=Current command            *
  150. *    D1=Command byte                *
  151. *                        *
  152. *   When you are finished with your command,    *
  153. *   assemble with TRASH'M-One and write    binary    *
  154. *   like this:                    *
  155. *                        *
  156. *    WB (PRESS ENTER and select the name)    *
  157. *    Begin>Command (PRESS ENTER)        *
  158. *    End>CommandEnd (PRESS ENTER)        *
  159. *                        *
  160. *************************************************
  161. *
  162. *        Your command should look like this...
  163. *
  164. * Command    Dc.L    "CMND"                    ;<-DON'T FORGET
  165. *        Dc.L    CommandEnd-Commmand-8            ;<-DON'T FORGET
  166. *        Dc.B    "name of the command     " = 24 bytes    ;<-DON'T FORGET
  167. *        SAVEREGS                    ;<-DON'T FORGET
  168. *
  169. *        ;Place your code here
  170. *        ;Example:
  171. *        MOVE.B    #$0F,D0    ;<-The MIDI byte in D0!
  172. *        SENDMIDI
  173. *
  174. *        LOADREGS                    ;<-DON'T FORGET
  175. *        RTS                        ;<-DON'T FORGET
  176. *CommandEnd
  177. *
  178. *************************************************
  179. * Offsets for userdata buffer            *
  180. *************************************************
  181.  
  182. u_sizeof    EQU    1024
  183.  
  184. *************************************************
  185. *                        *
  186. *************************************************
  187.  
  188. cmd_SetTempo    Dc.L    "CMND"
  189.         Dc.L    cmd_SetTempoEnd-cmd_SetTempo-8
  190.         Dc.B    "Set tempo               "
  191.         SAVEREGS
  192.         MOVEQ    #0,D0
  193.         MOVE.B    D1,D0
  194.         CMP.B    #32,D0
  195.         BHS    stOk
  196.         MOVEQ    #32,D0
  197. stOk        MOVE.L    mdat_Tempo(A2),A0
  198.         MOVE.W    D0,(A0)
  199.         MOVE.L    mdat_UpdateTempoProp(A2),A0
  200.         ST    (A0)    ;<-Refresh tempo prop...
  201.         SETTEMPO
  202.         LOADREGS
  203.         RTS
  204. cmd_SetTempoEnd
  205.  
  206. *************************************************
  207.  
  208. cmd_SetSpeed    Dc.L    "CMND"
  209.         Dc.L    cmd_SetSpeedEnd-cmd_SetSpeed-8
  210.         Dc.B    "Set speed               "
  211.         SAVEREGS
  212.         MOVE.L    mdat_Speed(A2),A0
  213.         MOVE.L    mdat_Counter(A2),A1
  214.         MOVEQ    #0,D0
  215.         MOVE.B    D1,D0
  216.         MOVE.W    D0,(A0)
  217.         MOVE.W    D0,(A1)
  218.         LOADREGS
  219.         RTS
  220. cmd_SetSpeedEnd
  221.  
  222. *************************************************
  223.  
  224. cmd_ChangeVelocity
  225.         Dc.L    "CMND"
  226.         Dc.L    cmd_ChangeVelocityEnd-cmd_ChangeVelocity-8
  227.         Dc.B    "Change velocity         " 
  228.  
  229.         SAVEREGS
  230.         MOVE.B    D1,n_volume(A5)
  231.         LOADREGS
  232.         RTS
  233. cmd_ChangeVelocityEnd
  234.  
  235. *************************************************
  236.  
  237. cmd_SetPanPot
  238.         Dc.L    "CMND"
  239.         Dc.L    cmd_SetPanPotEnd-cmd_SetPanPot-8
  240.         Dc.B    "Set panpot              "
  241.  
  242.         SAVEREGS
  243.         MOVE.B    n_channel(A5),D0
  244.         OR.B    #$B0,D0
  245.         SENDMIDI
  246.         MOVE.B    #$0A,D0
  247.         SENDMIDI
  248.         MOVE.B    D1,D0
  249.         SENDMIDI
  250.         LOADREGS
  251.         RTS
  252. cmd_SetPanPotEnd
  253.  
  254. *************************************************
  255.  
  256. cmd_SetLength
  257.         Dc.L    "CMND"
  258.         Dc.L    cmd_SetLengthEnd-cmd_SetLength-8
  259.         Dc.B    "Set length              "
  260.  
  261.         SAVEREGS
  262.         TST.B    D1
  263.         BEQ    slSkip
  264.         MOVE.B    D1,n_length(A5)
  265. slSkip        LOADREGS
  266.         RTS
  267. cmd_SetLengthEnd
  268.  
  269. *************************************************
  270.  
  271. cmd_AfterTouch
  272.         Dc.L    "CMND"
  273.         Dc.L    cmd_AfterTouchEnd-cmd_AfterTouch-8
  274.         Dc.B    "Aftertouch              "
  275.  
  276.         SAVEREGS
  277.         MOVE.B    n_channel(A5),D0
  278.         OR.B    #$D0,D0
  279.         SENDMIDI
  280.         MOVE.B    D1,D0
  281.         SENDMIDI
  282.         LOADREGS
  283.         RTS
  284. cmd_AfterTouchEnd
  285.  
  286. *************************************************
  287.  
  288. cmd_Breath
  289.         Dc.L    "CMND"
  290.         Dc.L    cmd_BreathEnd-cmd_Breath-8
  291.         Dc.B    "Breath (JD-800)         "
  292.  
  293.         SAVEREGS
  294.         MOVE.B    n_channel(A5),D0
  295.         OR.B    #$B0,D0
  296.         SENDMIDI
  297.         MOVE.B    #$02,D0
  298.         SENDMIDI
  299.         MOVE.B    D1,D0
  300.         SENDMIDI
  301.         LOADREGS
  302.         RTS
  303. cmd_BreathEnd
  304.  
  305. *************************************************
  306.  
  307. cmd_PitchBendUp
  308.         Dc.L    "CMND"
  309.         Dc.L    cmd_PitchBendUpEnd-cmd_PitchBendUp-8
  310.         Dc.B    "Pitch up                "
  311.  
  312.         SAVEREGS
  313.         MOVE.B    n_channel(A5),D0
  314.         OR.B    #$E0,D0
  315.         SENDMIDI
  316.         MOVE.B    #$00,D0
  317.         SENDMIDI
  318.  
  319.         MOVE.B    D1,D0
  320.         CMP.B    #$3F,D0
  321.         BLS    pbuOk
  322.         MOVEQ    #$3F,D0
  323. pbuOk        ADD.B    #$40,D0
  324.         SENDMIDI
  325.         LOADREGS
  326.         RTS
  327. cmd_PitchBendUpEnd
  328.  
  329. *************************************************
  330.  
  331. cmd_PitchBendDown
  332.         Dc.L    "CMND"
  333.         Dc.L    cmd_PitchBendDownEnd-cmd_PitchBendDown-8
  334.         Dc.B    "Pitch down              "
  335.  
  336.         SAVEREGS
  337.         MOVE.B    n_channel(A5),D0
  338.         OR.B    #$E0,D0
  339.         SENDMIDI
  340.         MOVE.B    #$00,D0
  341.         SENDMIDI
  342.  
  343.         MOVE.B    #$40,D0
  344.         CMP.B    D0,D1
  345.         BLS    pbdOk
  346.         MOVE.B    #$40,D1
  347. pbdOk        SUB.B    D1,D0
  348.         SENDMIDI
  349.         LOADREGS
  350.         RTS
  351. cmd_PitchBendDownEnd
  352.  
  353. *************************************************
  354.  
  355. cmd_Expression
  356.         Dc.L    "CMND"
  357.         Dc.L    cmd_ExpressionEnd-cmd_Expression-8
  358.         Dc.B    "Expression (D10)        "
  359.         SAVEREGS
  360.         MOVE.B    n_channel(A5),D0
  361.         OR.B    #$B0,D0
  362.         SENDMIDI
  363.         MOVE.B    #$0B,D0
  364.         SENDMIDI
  365.         MOVE.B    D1,D0
  366.         SENDMIDI
  367.         LOADREGS
  368.         RTS
  369. cmd_ExpressionEnd
  370.  
  371. *************************************************
  372.  
  373. cmd_Modulation    Dc.L    "CMND"
  374.         Dc.L    cmd_ModulationEnd-cmd_Modulation-8
  375.         Dc.B    "Modulation              "
  376.  
  377.         SAVEREGS
  378.         MOVE.B    n_channel(A5),D0
  379.         OR.B    #$B0,D0
  380.         SENDMIDI
  381.         MOVE.B    #$01,D0
  382.         SENDMIDI
  383.         MOVE.B    D1,D0
  384.         SENDMIDI
  385.         LOADREGS
  386.         RTS
  387. cmd_ModulationEnd
  388.  
  389. *************************************************
  390.  
  391. cmd_ProgramChange
  392.         Dc.L    "CMND"
  393.         Dc.L    cmd_ProgramChangeEnd-cmd_ProgramChange-8
  394.         Dc.B    "Program change          "
  395.  
  396.         SAVEREGS
  397.         MOVE.B    n_channel(A5),D0
  398.         OR.B    #$C0,D0
  399.         SENDMIDI
  400.         MOVE.B    D1,D0
  401.         SENDMIDI
  402.         LOADREGS
  403.         RTS
  404. cmd_ProgramChangeEnd
  405.  
  406. *************************************************
  407.  
  408. cmd_MainVolume
  409.         Dc.L    "CMND"
  410.         Dc.L    cmd_MainVolumeEnd-cmd_MainVolume-8
  411.         Dc.B    "Main volume             "
  412.         SAVEREGS
  413.         MOVE.B    n_channel(A5),D0
  414.         OR.B    #$B0,D0
  415.         SENDMIDI
  416.         MOVE.B    #$07,D0
  417.         SENDMIDI
  418.         MOVE.B    D1,D0
  419.         SENDMIDI
  420.         LOADREGS
  421.         RTS
  422. cmd_MainVolumeEnd
  423.  
  424. *************************************************
  425.  
  426. cmd_PatternBreak
  427.         Dc.L    "CMND"
  428.         Dc.L    cmd_PatternBreakEnd-cmd_PatternBreak-8
  429.         Dc.B    "Pattern break           "
  430.         SAVEREGS
  431.         MOVEQ    #0,D0
  432.         MOVE.B    D1,D0
  433.         CMP.B    #$3F,D0
  434.         BLS    pbOk
  435.         MOVE.W    #$3F,D0
  436. pbOk        MOVE.L    mdat_PattBreakPos(A2),A0
  437.         MOVE.W    D0,(A0)
  438.         MOVE.L    mdat_PattBreakFlag(A2),A0
  439.         ST    (A0)
  440.         LOADREGS
  441.         RTS
  442. cmd_PatternBreakEnd
  443.  
  444. *************************************************
  445.  
  446. cmd_ResetControllers
  447.         Dc.L    "CMND"
  448.         Dc.L    cmd_ResetControllersEnd-cmd_ResetControllers-8
  449.         Dc.B    "Reset controllers       "
  450.         SAVEREGS
  451.         MOVE.B    D1,D0
  452.         BEQ    rcNormal
  453.         SUB.B    #1,D0
  454.         CMP.B    #15,D0
  455.         BLS    rcReset
  456.         MOVE.B    #15,D0
  457.         BRA    rcReset
  458. rcNormal    MOVE.B    n_channel(A5),D0
  459. rcReset        OR.B    #$B0,D0
  460.         SENDMIDI
  461.         MOVE.B    #$79,D0
  462.         SENDMIDI
  463.         MOVE.B    #$00,D0
  464.         SENDMIDI
  465.         LOADREGS
  466.         RTS
  467. cmd_ResetControllersEnd
  468.  
  469. *************************************************
  470.  
  471. cmd_StopNote
  472.         Dc.L    "CMND"
  473.         Dc.L    cmd_StopNoteEnd-cmd_StopNote-8
  474.         Dc.B    "Stop note               "
  475.         SAVEREGS
  476.         CLR.B    n_length(A5)
  477.         TST.B    n_note(A5)
  478.         BEQ    snSkip
  479.         MOVE.B    n_channel(A5),D0
  480.         OR.B    #$90,D0
  481.         SENDMIDI
  482.         MOVE.B    n_note(A5),D0
  483.         SENDMIDI
  484.         MOVEQ    #0,D0
  485.         SENDMIDI
  486.         CLR.B    n_note(A5)
  487. snSkip        LOADREGS
  488.         RTS
  489. cmd_StopNoteEnd
  490.  
  491. *************************************************
  492.  
  493. cmd_SetChannel    Dc.L    "CMND"
  494.         Dc.L    cmd_SetChannelEnd-cmd_SetChannel-8
  495.         Dc.B    "Set channel             "
  496.         SAVEREGS
  497.         AND.B    #$0F,D1
  498.         MOVE.B    D1,n_channel(A5)
  499.         LOADREGS
  500.         RTS
  501. cmd_SetChannelEnd
  502.  
  503. *************************************************
  504.  
  505. cmd_NoteDelay    Dc.L    "CMND"
  506.         Dc.L    cmd_NoteDelayEnd-cmd_NoteDelay-8
  507.         Dc.B    "Note delay              "
  508.         SAVEREGS
  509.         MOVE.L    mdat_Speed(A2),A0
  510.         MOVE.W    (A0),D2
  511.         CMP.B    D2,D1
  512.         BHI    .Skip
  513.         MOVE.B    D1,n_notedelay(A5)
  514. .Skip        LOADREGS
  515.         RTS
  516. cmd_NoteDelayEnd
  517.  
  518. *************************************************
  519.